package cn.iluwen.airline.Mapper;

import cn.iluwen.airline.Entities.UserRegistration;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 用户注册数据访问接口
 */
@Mapper
public interface UserRegistrationMapper {
    
    /**
     * 创建用户注册记录
     * @param registration 注册记录对象
     * @return 影响行数
     */
    @Insert("INSERT INTO user_registrations (registration_id, registration_date, username, password, email, " +
            "phone, real_name, id_card, registration_ip, registration_source) " + 
            "VALUES (#{registrationId}, #{registrationDate}, #{username}, #{password}, #{email}, " + 
            "#{phone}, #{realName}, #{idCard}, #{registrationIp}, #{registrationSource})")
    int createRegistration(UserRegistration registration);
    
    /**
     * 根据ID查询注册记录
     * @param registrationId 注册记录ID
     * @return 注册记录对象
     */
    @Select("SELECT * FROM user_registrations WHERE registration_id = #{registrationId}")
    UserRegistration findById(String registrationId);
    
    /**
     * 根据邮箱查询注册记录
     * @param email 邮箱
     * @return 注册记录对象
     */
    @Select("SELECT * FROM user_registrations WHERE email = #{email}")
    UserRegistration findByEmail(String email);
    
    /**
     * 根据用户名查询注册记录
     * @param username 用户名
     * @return 注册记录对象
     */
    @Select("SELECT * FROM user_registrations WHERE username = #{username}")
    UserRegistration findByUsername(String username);
    
    /**
     * 查询所有注册记录
     * @return 注册记录列表
     */
    @Select("SELECT * FROM user_registrations")
    List<UserRegistration> findAllRegistrations();
    
    /**
     * 分页查询注册记录
     * @return 注册记录列表（分页结果由PageHelper处理）
     */
    @Select("SELECT * FROM user_registrations ORDER BY registration_date DESC")
    List<UserRegistration> findRegistrationsWithPaging();
    
    /**
     * 根据注册日期范围分页查询注册记录
     * @param startDate 开始日期（yyyy-MM-dd HH:mm:ss格式）
     * @param endDate 结束日期（yyyy-MM-dd HH:mm:ss格式）
     * @return 注册记录列表（分页结果由PageHelper处理）
     */
    @Select("SELECT * FROM user_registrations WHERE registration_date BETWEEN #{startDate} AND #{endDate} ORDER BY registration_date DESC")
    List<UserRegistration> findRegistrationsByDateRange(@Param("startDate") String startDate, @Param("endDate") String endDate);
    
    /**
     * 根据注册来源分页查询注册记录
     * @param source 注册来源
     * @return 注册记录列表（分页结果由PageHelper处理）
     */
    @Select("SELECT * FROM user_registrations WHERE registration_source = #{source} ORDER BY registration_date DESC")
    List<UserRegistration> findRegistrationsBySource(@Param("source") String source);
    
    /**
     * 删除注册记录
     * @param registrationId 注册记录ID
     * @return 影响行数
     */
    @Delete("DELETE FROM user_registrations WHERE registration_id = #{registrationId}")
    int deleteRegistration(String registrationId);
} 